		import java.io.BufferedInputStream;
	import java.io.FileInputStream;
	import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
	import java.security.KeyPair;
	import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
	import java.security.PrivateKey;
	import java.security.PublicKey;
	import java.security.SecureRandom;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;

public class podpis {



	
	 PrivateKey prywatny;
	    PublicKey publiczny;
	    byte[] sigBytes;
	    String tekst;
	 public void generujPodpis(String tekst) throws SignatureException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException {
    
//char[] s = new char[100];
this.tekst=tekst;
char[] s = tekst.toCharArray();
	            KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA",
	                "SUN");
	           

	            keyGen.initialize(512, new SecureRandom());

	            KeyPair para = keyGen.generateKeyPair();
	            prywatny = para.getPrivate();
	            publiczny = para.getPublic();

	        
	            Signature sygnatura = Signature.getInstance("DSA", "SUN");

	            sygnatura.initSign(prywatny);
   
	            byte[] message = tekst.getBytes(); ;
	      
	     
	        	sygnatura.update(message);
	        	sigBytes = sygnatura.sign();
	         String sig = new String(sigBytes);
	         String mes = new String(message);
	        	
	        ////////////////////////////////////////////////////////////////////
	        	sygnatura.initVerify(para.getPublic());
	        	sygnatura.update(message);
	        	
	        		
	        		System.out.println(prywatny);
	        		System.out.println(publiczny);
	        		 System.out.println("bb : " + message);
	        		System.out.println(s);
	        		System.out.println(message+"\n");
	        		System.out.println(sygnatura.toString());
	        		System.out.println(sig);
	        		System.out.println(mes);	        	
	        		System.out.println(sigBytes);
	        
			


	      }

	 

	      public PrivateKey rprywatny(){
	          return prywatny;
	      }

	      public PublicKey rpubliczny(){
	          return publiczny;
	      }
	      public byte[] sygnatura(){
	    	  return sigBytes;
	      }
	      public String tekst(){
	    	  return tekst;
	      }
	      public String zaszyfrowany(){
	    	  String tekscik = new String(sigBytes);
	    	  return tekscik;
	      }
	      public String wynik(){
	    	  
		    	 BigInteger c= new BigInteger(sigBytes);
		    	 String wynik= new String(c.toString());
		    	  return wynik;
		      }
	      public byte[] wynik1(String t){
	    	  BigInteger c= new BigInteger(t);
		    	 
		    	 byte[] wynik= c.toByteArray();
		    	  return wynik;
		      }
	      
	      public boolean weryfikacjaPodpisu(PublicKey publiczny, byte[] podpis, String tekst,boolean wer) throws IOException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException, InvalidKeyException, SignatureException {

	  
	         

	          

	              
	              Signature sig = Signature.getInstance("DSA", "SUN");
	              sig.initVerify(publiczny);

	        byte[] tekscik = tekst.getBytes();      

	        sig.update(tekscik);

	        if(sig.verify(podpis)){
	        	wer=true;
	        }
	        else{
	        	wer=false;
	        }
	             


	         return wer;

	      }
	 

	public static void main(String[] args) throws InvalidKeyException, SignatureException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException, IOException {
		// TODO Auto-generated method stub
podpis p = new podpis();
p.generujPodpis("sasdasdasadsssss");
//p.weryfikacjaPodpisu(p.rpubliczny(), p.sygnatura(),p.tekst);
System.out.println(p.wynik());
System.out.println(p.wynik1(p.wynik()));
	}

}
